// pages/edit_info/edit_info.js
Page({

  /**
   * 页面的初始数据
   */
  data: {
    user_id: '',
    user_info: {},
    picture: "",
    errors: {}, // 存储错误信息
    edit_msg: '', // 昵称
    user_phone: '', // 手机号
    age: '', // 年龄
    genderIndex: 0, // 性别索引
    genders: ['男', '女'], // 性别选项
    address: '', // 住址
    hobby: '', // 爱好
    real_name: '', // 真实姓名
  },
  // 通过传过来的用户id去寻找数据库中对应的数据
  user_info() {
    const db = wx.cloud.database()
    const {
      user_id
    } = this.data
    db.collection('users').doc(user_id).get()
      .then((res) => {
        console.log('用户信息：', res)
        const user_info = res.data
        console.log(res.data.avatarUrl)
        const edit_msg = res.data.nickName
        const user_phone = res.data.phone
        const { age, gender, address, hobby,real_name } = res.data
        let genderIndex = this.data.genders.indexOf(gender);  // 返回目标字符串的下标
        this.setData({
          user_info,
          picture: res.data.avatarUrl,
          edit_msg,
          user_phone,
          age, 
          address,
          hobby,
          genderIndex,
          real_name
        })
      })
      .catch((err) => {
        console.log('数据库信息获取失败', err)
      })
  },
  // 上传图片的方法
  upload_img() {
    // 让用户选择一张图片
    wx.chooseMedia({
      count: 1, // 选择一张图片
      mediaType: ['image'], // 只允许选择图片
      success: chooseResult => {
        // 获取用户选择的图片临时路径
        const tempFilePath = chooseResult.tempFiles[0].tempFilePath;
        console.log('用户选择的图片临时路径:', tempFilePath);
        // 将图片上传至云存储空间
        wx.cloud.uploadFile({
          cloudPath: `images/${Date.now()}.png`, // 指定上传到的云路径（可以自定义路径和文件名）
          filePath: tempFilePath, // 使用用户选择的临时文件路径
          success: res => {
            console.log('上传成功', res);
            // 上传成功后，获取文件的云存储路径（fileID）
            const fileID = res.fileID;
            console.log('文件云存储路径（fileID）:', fileID);
            // 获取文件的临时下载链接
            wx.cloud.getTempFileURL({
              fileList: [fileID], // 需要获取下载链接的文件列表
              success: tempRes => {
                const fileTempURL = tempRes.fileList[0].tempFileURL;
                console.log('文件的临时下载链接:', fileTempURL);
                this.setData({
                  picture: fileTempURL
                })
                // 可以将 fileTempURL 存储到数据库或展示在页面上
              },
              fail: tempErr => {
                console.error('获取下载链接失败', tempErr);
              }
            });
          },
          fail: err => {
            console.error('上传失败', err);
          }
        });
      },
      fail: err => {
        console.error('选择图片失败', err);
      }
    });
  },
  // 删除页面上的图片,删除上传图片
  delete() {
    if (!this.data.cloudFileID) {
      return this.setData({
        picture: ''
      });
    }

    wx.showLoading({
      title: '删除中...'
    });

    // 删除云存储文件
    wx.cloud.deleteFile({
      fileList: [this.data.cloudFileID],
      success: res => {
        console.log('云文件删除成功', res);
        this.setData({
          picture: '',
          cloudFileID: null
        });
        wx.hideLoading();
        wx.showToast({
          title: '删除成功',
          icon: 'success'
        });
      },
      fail: err => {
        console.error('云文件删除失败', err);
        wx.hideLoading();
        wx.showToast({
          title: '删除失败',
          icon: 'error'
        });
        // 即使云文件删除失败，仍然清除本地显示
        this.setData({
          picture: ''
        });
      }
    });
  },
  // 表单验证函数封装-errors填充
  validateForm() {
    const {
      edit_msg,
      picture,
      user_phone
    } = this.data;
    const errors = {};
    // 验证用户名
    if (!edit_msg) {
      errors.edit_msg = '用户名不能为空'
    }

    // 验证图片上传
    if (!picture) {
      errors.picture = '上传图片不能为空'
    }

    // 验证手机号
    if (!user_phone) {
      errors.user_phone = '手机号不能为空'
    }
    // 更新错误信息
    this.setData({
      errors
    });

    // 返回验证结果
    return Object.keys(errors).length === 0; // 如果没有错误，返回 true
  },
  // 重置信息
  reset() {
    this.setData({
      edit_msg: '',
      picture: '',
      user_phone: ''
    })
  },
  // 输入框事件处理
  // 表单事件--name
  Oninput_name(e) {
    console.log(e)
    const edit_msg = e.detail.value
    this.setData({
      edit_msg
    })
  },
  // 表单事件--phone
  Oninput_phone(e) {
    console.log(e)
    const user_phone = e.detail.value
    this.setData({
      user_phone
    })
  },
  Oninput_age(e) {
    this.setData({
      age: e.detail.value
    });
  },
  Oninput_gender(e) {
    this.setData({
      genderIndex: e.detail.value
    });
  },
  Oninput_address(e) {
    this.setData({
      address: e.detail.value
    });
  },
  Oninput_hobby(e) {
    this.setData({
      hobby: e.detail.value
    });
  },
  Oninput_real_name(e) {
    this.setData({
      real_name: e.detail.value
    });
  },

  // 立即修改
  go_navigation() {
    console.log(111)
    // 验证表单
    if (this.validateForm()) {
      const { edit_msg, picture, user_phone, age, genderIndex, address, hobby,real_name } = this.data;
      const gender = this.data.genders[genderIndex]
      wx.cloud.database().collection("users").doc(this.data.user_id).update({
        data: {
          nickName: edit_msg,
          avatarUrl: picture,
          phone: user_phone,
          age,
          gender,
          address,
          hobby,
          real_name
        },
        success: (res) => {
          console.log("更新成功", res, '更改的信息：', this.data.edit_msg, this.data.picture, this.data.user_phone)
          wx.switchTab({
            url: '/pages/my-info/my-info',
          })
          wx.showToast({
            title: '修改成功',
            icon: 'success'
          });
        },
        fail(err) {
          console.log('更新失败', err)
          wx.showToast({
            title: '修改失败',
            icon: 'error'
          });
        }
      })
    }
  },
  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    console.log(options)
    // options 中包含 URL 查询参数
    const user_id = options.user_id;

    // 将 user_id 设置到页面数据中
    this.setData({
      user_id: user_id
    });
    console.log(user_id)
    wx.setNavigationBarTitle({
      title: '信息修改',
    })
    this.user_info()
    wx.showLoading({
      title: '加载中',
    })
  },
  onReady() {
    wx.hideLoading()
  }
})